<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 回调函数：一个函数作为参数，传递给另一个函数
    function name(params) {
        params(87)//实参
    }
    name(function(date) {
        console.log(date);//形参
    })

     // 自己封装myforEach 
     var arr=[1,2,33,4,33,55,46]
     Array.prototype.myForEach=function(fn){
         for (let index = 0; index < this.length; index++) {
             fn(this[index],index)
         }
     }
    //  使用这个方法
     arr.myForEach(function(name,index){
         console.log(name,index);
     })


    //  写一个方法
    arr.__proto__.xxx=function(){}
    console.log(arr);



    //  原型     原型链
    // 对象【{}，[]，function，正则表达式】有原型链  _proto_    浏览器看到的[[Prototype]]
    // 函数有原型     prototype
    // 函数与对象关系  构造函数 》》new 》》对象
    // 构造函数的prototype==对象._proto_
    // 对象._proto_==构造函数.prototype //对象的原型链指向构造函数的原型


// reduce高阶函数，可作为累加器
var arrA=[1,2,3]
    var s=arrA.reduce(function(p,n){
        // console.log(p);
        console.log(n);
        return p+=n
    })
    console.log(s);
</script>
</html>